﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using QLHXNK.BusinessLogic;

namespace QLHXNK
{
    public partial class FrmNhapHangKinhDoanh : Form
    {
        #region Properties
        private int ImportNoteID = -1;
        private int ImportNoteDetailID = -1;
        private int ItemID = -1;
        private int action;//0:thêm chi tiết, 1: xóa chi tiết, 2: sửa chi tiết;;; 3: thêm đơn hàng, 4: xóa đơn hàng, 5: sửa đơn hàng
        #endregion

        #region Form fucntions
        public FrmNhapHangKinhDoanh()
        {
            InitializeComponent();

            
        }

        private void FrmNhapHangKinhDoanh_Load(object sender, EventArgs e)
        {
            getDataGridViewSource(2);//0: cả hai, 1: chi tiết, 2: đơn hàng

            dgvDonHang_SelectionChanged(null, null);
            dgvChiTietDonHang_SelectionChanged(null, null);

            lblNote.Visible = false;
        }

        private void txtNgayDonHang_TextChanged(object sender, EventArgs e)
        {

        }
        private void dgvDonHang_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = dgvDonHang.SelectedRows;
            if (rows.Count == 1)
            {

                DataGridViewRow row = rows[0];
                try
                {
                    ImportNoteID = int.Parse(row.Cells["import_note_id"].Value.ToString());
                }
                catch
                {
                    ImportNoteID = -1;
                }

                StateData(false, Color.LightGray);

                if ((ImportNoteID == -1 || ImportNoteID == 0) && dgvDonHang.SelectedRows[0].Index == 0)/////////////
                {
                    btnSuaDonHang.Enabled = false;
                    btnXoaDonHang.Enabled = false;
                    FillData("", "", "");
                }
                else
                {
                    FillData(row.Cells["SoDonHang"].Value.ToString(), row.Cells["NgayDonHang"].Value.ToString(), row.Cells["TiGia"].Value.ToString());
                    btnSuaDonHang.Enabled = true;
                    btnXoaDonHang.Enabled = true;
                }
            }
            else
            {
                btnSuaDonHang.Enabled = false;
                FillData("", "", "");
            }

            getDataGridViewSource(1);
        }

        private void btnSuaDonHang_Click(object sender, EventArgs e)
        {
            prepareUpdateImportNote();
        }

        private void btnXoaDonHang_Click(object sender, EventArgs e)
        {
            DeleteImportNote();
        }

        private void dgvChiTietDonHang_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = dgvChiTietDonHang.SelectedRows;
            if (rows.Count == 1)
            {

                DataGridViewRow row = rows[0];
                try
                {
                    ImportNoteDetailID = int.Parse(row.Cells["import_note_detail_id"].Value.ToString());
                    ItemID = int.Parse(row.Cells["item_id"].Value.ToString());
                }
                catch
                {
                    ImportNoteDetailID = -1;
                    ItemID = -1;
                }


                btnSua.Enabled = true;
                btnXoa.Enabled = true;
                lblNote.Visible = false;////////////
            }
            else
            {
                btnSua.Enabled = false;
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void txtNgayDonHang_TextChanged_1(object sender, EventArgs e)
        {
            //Ngày đơn hàng
            if (txtNgayDonHang.Text.Trim() != "")
            {
                try
                {
                    DateTime date = DateTime.Parse(txtNgayDonHang.Text);
                    errorProvider1.SetError(txtNgayDonHang, "");
                }
                catch
                {
                    errorProvider1.SetError(txtNgayDonHang, "Ngày đơn hàng không hợp lệ");
                }
            }

        }

        private void txtTiGia_TextChanged(object sender, EventArgs e)
        {
            if (txtTiGia.Text.Trim() != "")
            {
                try
                {
                    Double d = Double.Parse(txtTiGia.Text);
                    errorProvider1.SetError(txtTiGia, "");
                }
                catch
                {
                    errorProvider1.SetError(txtTiGia, "Tỉ giá không hợp lệ");

                }
            }
        }
        #endregion
        

        #region Hàm hỗ trợ

        /// <summary>
        /// op=0: cả hai, 1: list chi tiết đơn hàng, 2: list đơn hàng
        /// </summary>
        /// <param name="op"></param>
        private void getDataGridViewSource(int op)
        {
            if (op == 0 || op == 2)
            {
                dgvDonHang.DataSource = Import_Note.getImport_NoteList("");
                //DataRow row = ((DataTable)dgvDonHang.DataSource).NewRow();
                //((DataTable)dgvDonHang.DataSource).Rows.InsertAt(row, 0);
            }
            if (op == 0 || op == 1)
            {
                if (ImportNoteID != -1)
                {
                    String strSQL = String.Format("SELECT ind.ID as import_note_detail_id, i.item_code, i.item_name, ind.item_id, ind.quantity, ind.fob_usd, ind.fob_eur, ind.cif_usd, ind.cif_eur, ind.kr_fee, ind.hk_fee, ind.ita_fee, ind.tl_fee, ind.other_country_fee, ind.ut_fee, ind.vat_fee, ind.tax_fee, ind.other_fee, ind.net1, ind.net2, ind.selling_price, ind.profit1, ind.profit2 " +
                                    "FROM Import_Note_Detail ind, Item i " +
                                    "WHERE ind.import_note_id = {0} AND ind.item_id = i.ID ", ImportNoteID);
                    dgvChiTietDonHang.DataSource = Import_Note_Detail.getImport_Note_DetailList(strSQL);
                }
            }

            
        }
        private void ProcessData()
        {
            //Xử lý khoảng trắng:
            txtSoDonHang.Text = txtSoDonHang.Text.Trim();
            txtNgayDonHang.Text = txtNgayDonHang.Text.Trim();
            txtTiGia.Text = txtTiGia.Text.Trim();
        }

        private bool ValidateData()
        {
            bool isValidate = true;

            //Số đơn hàng
            if (txtSoDonHang.Text == "")
            {
                errorProvider1.SetError(txtSoDonHang, "Bạn chưa nhập số đơn hàng");
                isValidate = false;
            }
            

            //Ngày đơn hàng
            if (txtNgayDonHang.Text == "")
            {
                errorProvider1.SetError(txtNgayDonHang, "Bạn chưa nhập ngày đơn hàng");
                isValidate = false;
            }
            else
            {
                try
                {
                    DateTime date = DateTime.Parse(txtNgayDonHang.Text);
                }
                catch
                {
                    errorProvider1.SetError(txtNgayDonHang, "Ngày đơn hàng không hợp lệ");
                    isValidate = false;
                }
            }

            //Tỉ giá:
            if (txtTiGia.Text != "")
            {
                try
                {
                    Double d = Double.Parse(txtTiGia.Text);
                }
                catch
                {
                    errorProvider1.SetError(txtTiGia, "Tỉ giá không hợp lệ");
                    isValidate = false;
                }
            }

            return isValidate;
        }
        private void FillData(String soDonHang, String ngayDonHang, String tiGia)
        {
            txtSoDonHang.Text = soDonHang;
            try
            {
                txtNgayDonHang.Text = DateTime.Parse(ngayDonHang).ToShortDateString();
            }
            catch
            {
                txtNgayDonHang.Text = ngayDonHang;
            }
            txtTiGia.Text = tiGia;
        }

        private void StateData(bool state, Color color)
        {
            txtSoDonHang.BackColor = color;
            txtNgayDonHang.BackColor = color;
            txtTiGia.BackColor = color;

            txtSoDonHang.Enabled = state;
            txtNgayDonHang.Enabled = state;
            txtTiGia.Enabled = state;

        }


        private void ShowNote(string note, Color foreColor)
        {
            lblNote.Visible = true;
            lblNote.ForeColor = foreColor;
            lblNote.Text = note;
        }
        #endregion

        #region Lưu
        private void Save()
        {
            lblNote.Visible = false;
            ProcessData();                  //Tiền xữ lý dữ liệu nhập(xử lý khoản trắng...)

            if (ValidateData() == false)
            {
                ShowNote("Dữ liệu không hợp lệ. Hãy kiểm tra lại!", Color.Red);
                return;                     //nếu dữ liệu nhập không hợp lệ thì thoát và thông báo
            }

            if (action == -1)
            {
                ShowNote("Bạn hãy chọn chức năng: Thêm mới, Xoá, Sửa", Color.Green);
                return;
            }

            //Sửa đơn hàng:
            if (action == 5 && ImportNoteID != -1)
            {
                int result = Import_Note.Update1(ImportNoteID, txtSoDonHang.Text, txtNgayDonHang.Text, txtTiGia.Text);

                if (result == 0 || result == -1)
                    ShowNote("Chưa xóa được. Xin thử lại!", Color.Red);

                if (result == 1)
                {
                    ShowNote("Sửa thành công!", Color.Green);
                    dgvChiTietDonHang.Visible  = true;

                    btnThemMoiDonHang.Enabled = true;
                    btnXoaDonHang.Enabled = true;

                    btnThem.Enabled = true;
                    btnSua.Enabled = true;
                    btnXoa.Enabled = true;

                    getDataGridViewSource(2);
                }
            }

            //Thêm đơn hàng:
            if (action == 3)
            {
                int r = Import_Note.Insert(txtSoDonHang.Text, txtNgayDonHang.Text, txtTiGia.Text, "");
                if (r == 1)
                {
                    ShowNote("Thêm đơn hàng thành công", Color.Green);

                    dgvDonHang.Enabled = true;
                    btnXoaDonHang.Enabled = true;
                    btnSuaDonHang.Enabled = true;

                    btnThem.Enabled = true;
                    btnSua.Enabled = true;
                    btnXoa.Enabled = true;

                    dgvChiTietDonHang.Visible = true;
                 
                    getDataGridViewSource(2);
                }
                else
                {
                    ShowNote("Lỗi! Thêm đơn hàng không thành công", Color.Red);
                }
               
            }
        }
        #endregion

        #region Thêm đơn hàng
        private void prepareInsertImportNote()
        {
            

            //Make Import_Note_code:
            int importNotesCount = -1;
            DataTable table = MyDataTransfer.executeQueryCommand("SELECT COUNT(*) as rows_count FROM Import_Note");
            if (table!=null && table.Rows.Count==1)
            {
                try
                {
                    importNotesCount = (int)table.Rows[0]["rows_count"];
                    importNotesCount++;//Tăng lên
                }
                catch
                {
                    ;
                }
            }
            
            

            DateTime today = DateTime.Today;
            String soDonHang = "DH/" + ((today.Month < 10) ? ("0" + today.Month.ToString()) : today.Month.ToString()) + today.Year.ToString().Remove(0, 2) + "/" + ((importNotesCount == -1) ? "" : importNotesCount.ToString());
            String ngayDonHang = today.ToShortDateString();
         
            FillData(soDonHang, ngayDonHang, "");

            //state controls:
            StateData(true, Color.White);
            dgvChiTietDonHang.Visible = false;

            dgvDonHang.Enabled = false;
            btnXoaDonHang.Enabled = false;
            btnSuaDonHang.Enabled = false;

            btnThem.Enabled = false;
            btnSua.Enabled = false;        
            btnXoa.Enabled = false;

            action = 3;
            ShowNote("Hãy nhập thông tin đơn hàng rồi click Lưu", Color.Blue);

        }
        #endregion

        
        #region Xóa đơn hàng
        private void DeleteImportNote()
        {
            int result = 0;//số rows deleted
            DialogResult resultDlg = DialogResult.No;

            DataGridViewSelectedRowCollection rows = dgvDonHang.SelectedRows;

            if (rows.Count == 1)
            {
                if (dgvDonHang.SelectedRows[0].Index > 0)
                {
                    int ID = -1;

                    try
                    {
                        ID = int.Parse(rows[0].Cells["import_note_id"].Value.ToString());
                    }
                    catch
                    {
                        ID = -1;
                    }

                    if (ID != -1 && ID != 0)
                    {
                        resultDlg = MessageBox.Show("Bạn muốn xoá đơn hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                        if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                        {
                            int r = Import_Note.Delete(ID);
                            if (r == 1)
                            {
                                result++;
                                Import_Note_Detail.Delete_In_Import_Note(ID);
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        if (dgvDonHang.SelectedRows[0].Index > 0)
                            dgvDonHang.Rows.Remove(rows[0]);
                        return;
                    }
                }

            }
            else
            {
                resultDlg = MessageBox.Show("Bạn muốn xoá danh sách đơn hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        int ID = -1;

                        try
                        {
                            ID = int.Parse(rows[i].Cells["import_note_id"].Value.ToString());
                        }
                        catch
                        {
                            ID = -1;
                        }

                        if (ID != -1 || ID != 0)
                        {
                           int  r = Import_Note.Delete(ID);
                           if (r == 1)
                           {
                               result++;
                               Import_Note_Detail.Delete_In_Import_Note(ID);
                           }
                        }
                    }
                }
                else
                {
                    return;
                }
            }


            //Thong báo kết quả:
            if (result > 0)
            {
                ShowNote("Xóa xong " + result.ToString() + " đơn hàng", Color.Blue);
                getDataGridViewSource(2);
                action = -1;
                btnThem.Enabled = true;
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
            }
            else
                ShowNote("Chưa xóa dc! Xin thử lại", Color.Red);
        
        }
        #endregion

        #region Xóa chi tiết đơn hàng
        private void DeleteImportNoteDetail()
        {
            int result = 0;//số rows deleted
            DialogResult resultDlg = DialogResult.No;

            DataGridViewSelectedRowCollection rows = dgvChiTietDonHang.SelectedRows;

            if (rows.Count == 1)
            {

                int ID = -1;

                try
                {
                    ID = int.Parse(rows[0].Cells["import_note_detail_id"].Value.ToString());
                }
                catch
                {
                    ID = -1;
                }

                if (ID != -1 && ID != 0)
                {
                    resultDlg = MessageBox.Show("Bạn muốn xoá chi tiết đơn hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                    if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                    {
                        result += Import_Note_Detail.Delete(ID);
                       
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    if (dgvChiTietDonHang.SelectedRows[0].Index > 0)
                        dgvChiTietDonHang.Rows.Remove(rows[0]);
                    return;
                }


            }
            else
            {
                resultDlg = MessageBox.Show("Bạn muốn xoá danh sách chi tiết đơn hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        int ID = -1;

                        try
                        {
                            ID = int.Parse(rows[i].Cells["import_note_detail_id"].Value.ToString());
                        }
                        catch
                        {
                            ID = -1;
                        }

                        if (ID != -1 || ID != 0)
                        {
                            result += Import_Note_Detail.Delete(ID);
                        }
                    }
                }
                else
                {
                    return;
                }
            }


            //Thong báo kết quả:
            if (result > 0)
            {
                ShowNote("Xóa xong " + result.ToString() + " chi tiết đơn hàng", Color.Blue);
                getDataGridViewSource(1);
                action = -1;
                btnThem.Enabled = true;
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
            }
            else
                ShowNote("Chưa xóa dc! Xin thử lại", Color.Red);
        }
        #endregion

        #region Sửa đơn hàng
        private void prepareUpdateImportNote()
        {
            //state controls:
            StateData(true, Color.White);
            dgvChiTietDonHang.Visible  = false;

            btnXoaDonHang.Enabled = false;

            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;

            action = 5; //0:thêm chi tiết, 1: xóa chi tiết, 2: sửa chi tiết;;; 3: thêm đơn hàng, 4: xóa đơn hàng, 5: sửa đơn hàng
            ShowNote("Sửa thông tin cho đơn hàng và click Lưu ", Color.Blue);
        }

        #endregion

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DeleteImportNoteDetail();
        }
        #region Chi tiết đơn hàng
        /// <summary>
        /// op=0: Thêm, 1: Xóa, 2: Sửa
        /// </summary>
        /// <param name="op"></param>
        private void openEditImportDetailForm(int op)
        {
           
            Import_Note_Detail ind =new Import_Note_Detail();

            //Sửa:
            if (op == 2)
            {
                ind.ImportNoteDetailID = ImportNoteDetailID;
                ind.ItemID = ItemID;
                ind.ImportNoteID = ImportNoteID; 
            }

            //Thêm:
            if (op == 0)
            {
                ind.ImportNoteID = ImportNoteID;
            }

            FrmNhapChiTietHang f = new FrmNhapChiTietHang(ind, op, txtSoDonHang.Text, txtNgayDonHang.Text, txtTiGia.Text);
            f.ShowDialog();

            getDataGridViewSource(0);
        }
        #endregion
        private void btnThem_Click(object sender, EventArgs e)
        {
            openEditImportDetailForm(0);
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            openEditImportDetailForm(2);
        }

        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnThemMoiDonHang_Click(object sender, EventArgs e)
        {
            prepareInsertImportNote();
        }

        private void label5_Click(object sender, EventArgs e)
        {

        }

        

        
        
    }
}